// StackInterface.h: interface for the StackInterface class.
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_STACKINTERFACE_H__B9F8AD1B_80A3_4791_B298_0391A857EEF3__INCLUDED_)
#define AFX_STACKINTERFACE_H__B9F8AD1B_80A3_4791_B298_0391A857EEF3__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include "IterationTemplate.h"
#include "smallobject.h"

template <class IndexClass, class DataTypeClass, class OutDataTypeClass,
class IteratorType = IteratorTemplate<DataTypeClass> > class StackInterface : public SmallObject 
{
protected:
	typedef IndexClass Index;
	typedef DataTypeClass DataType;
	typedef OutDataTypeClass OutputDataType;

public:
	typedef IteratorType Iterator;

public:
	StackInterface(){}
	virtual ~StackInterface(){}

public:
	virtual void Add(const Index& index, const DataType& pType) = 0;
	virtual OutputDataType Get(const Index& index) = 0;
	virtual OutputDataType Remove(const Index& index) = 0;
	virtual void RemoveAll() = 0;

	virtual Iterator* NewIterator() = 0;
};

#endif // !defined(AFX_STACKINTERFACE_H__B9F8AD1B_80A3_4791_B298_0391A857EEF3__INCLUDED_)
